package com.meilai.project.service.system;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meilai.project.entity.system.Dictionary;
import com.meilai.project.vo.SelectOptionVO;
import com.meilai.project.vo.system.DictionaryVO;

import java.util.List;
import java.util.Map;

/**
 * @author 张驰
 * @date 2020/8/15 10:08
 */
public interface DictionaryService extends IService<Dictionary> {

    Map<Long, String> getNamesMapByIds(List<Long> ids, boolean hasStatus0, boolean hasDel);

    // 获取字典列表(一级、二级)
    List<Dictionary> list1stAnd2nd(String name, Integer status);

    // 获取字典列表(三级)
    IPage<Dictionary> list3rdAll(Long pid,
                                 String name,
                                 Integer status,
                                 int pageNum,
                                 int pageSize);

    // 获取字典列表(四级)
    IPage<Dictionary> list4thAll(Long pid,
                                 String name,
                                 Integer status,
                                 int pageNum,
                                 int pageSize);

    List<SelectOptionVO> pointTypeSelectOptions();

    // 新增
    int add(Dictionary createParams);

    // 修改
    int edit(Dictionary createParams);

    // 删除
    Boolean del(List<Integer> ids);

    // 修改状态
    Boolean changeStatus(int id, Integer status);

    // 二级code查询三级数据列表 只包括启用
    List<Dictionary> listByCode(String code);
    // 二级code查询三级数据列表 包括删除的和禁用的
    List<Dictionary> listByPCodeAll(String code);

    // 二级code查询三级数据列表（主库） 包括删除的和禁用的
    List<Dictionary> listByPCodeAllDoor(String code);

    // 一级code查询三级数据列表 包括删除的和禁用的
    List<Dictionary> listByTopCodeAll(String code);

    // 一级code查询三级数据列表(主库) 包括删除的和禁用的
    List<Dictionary> listByTopCodeAllDoor(String code);

    // 一级code查询三级数据列表 只包括启用
    List<Dictionary> listByTopCode(String code);

    // 二级code查询四级数据列表 只包括启用
    List<Dictionary> list4thBy2ndCode(String code);

    Boolean validateCode(Long id, String code);

    // 列表 包括启用、禁用
    List<Dictionary> listByCodeNoDel(String code);

    // 插入公司库
    boolean setCompanyPointType(String tenantName, List<Long> ids, List<Dictionary> dicts);

    String getDictNames(List<Long> ids);

    /**
     * 根据二级Code 查询三级和四级数据
     * @param code 编码
     * @return 返回树形结构数据 仅有三级和四级数据的树形结构
     */
    List<DictionaryVO> getTreeDictionaryVODataByCode2level(String code);
}
